#include<set>
// https://zh.cppreference.com/w/cpp/language/operator_comparison#.E4.B8.89.E8.B7.AF.E6.AF.94.E8.BE.83
// 三路比较运算符 <=>: 
// 若 左操作数 < 右操作数 则 (a <=> b) < 0
// 若 左操作数 > 右操作数 则 (a <=> b) > 0
// 而若 左操作数 和 右操作数 相等/等价则 (a <=> b) == 0
struct S{
    int i;
    int j;

    // 如果不添加三路比较运算符或者比较运算，S的对象无法作为set的元素，因为此类无法确定<运算，而set需要能够比较元素的大小

    auto operator<=>(const S& rhs)const=default;
    // bool operator<(const S& rhs)const 
    // {
    //     return i<rhs.i||i==rhs.i&&j<rhs.j;
    // }
};

int main()
{
    std::set<S> s;
    s.insert({1,2});
    s.insert({3,0});
}